import sys
from PyQt6.QtCore import QRect, QPoint, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QGroupBox, QHBoxLayout, QLabel, \
    QSizePolicy

# 导入自定义的 CaptureBox 和 CaptureInfoBox
from imgCapture.capture_box import CaptureBox
from imgCapture.capture_info_box import CaptureInfoBox

from imgCapture.image_group_box import ImageGroupBox


class MainWindow(QMainWindow):
    """主窗口类"""

    def __init__(self):
        super().__init__()
        self.setWindowTitle("图片工具")
        self.setGeometry(0, 0, 800, 600)  # 设置初始窗口大小

        # 创建一个中央窗口部件
        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)

        # 创建一个垂直布局
        layout = QVBoxLayout(central_widget)

        # 创建一个标签页控件
        self.tabWidget = QTabWidget()
        self.imgCaptureWidget = QWidget()
        self.templateComparisonWidget = QWidget()
        imgCaptureTab = self.tabWidget.addTab(self.imgCaptureWidget, "图片截取")
        # templateComparisonTab = self.tabWidget.addTab(self.templateComparisonWidget, "模板对比")

        # 设置tab1的布局
        self.setup_img_capture_tab()

        # 将标签页控件添加到布局中
        layout.addWidget(self.tabWidget)
        layout.setContentsMargins(0, 0, 0, 0)  # 移除布局的外边距，使标签页控件填满整个窗口

        # 设置窗口居中显示
        self.center()

    def center(self):
        """将窗口居中显示在屏幕上"""
        # 获取屏幕几何信息
        screen = QApplication.primaryScreen().geometry()

        # 获取窗口几何信息
        size = self.geometry()  

        # 计算居中位置
        new_left = (screen.width() - size.width()) // 2
        new_top = (screen.height() - size.height()) // 2

        # 移动窗口到居中位置
        self.move(new_left, new_top)

    def setup_img_capture_tab(self):
        """设置图片截取tab页布局"""

        # 创建主水平布局
        main_layout = QHBoxLayout(self.imgCaptureWidget)

        # 图片盒子
        self.imgBox = ImageGroupBox("图片")
        # self.image_group_box.py.setStyleSheet("background-color: lightblue;")

        # 截图盒子
        # 修改: 使用自定义的 CaptureBox 替换原来的 QGroupBox("截图")
        self.captureBox = CaptureBox()

        # 截图信息
        # 修改: 使用自定义的 CaptureInfoBox 替换原来的 QGroupBox("截图信息")
        self.group_box3 = CaptureInfoBox()

        # 创建左右两个部分的布局
        left_layout = QVBoxLayout()
        left_layout.addWidget(self.imgBox)

        right_layout = QVBoxLayout()
        right_layout.addWidget(self.captureBox)
        right_layout.addWidget(self.group_box3)

        # 添加到主布局
        main_layout.addLayout(left_layout)
        main_layout.addLayout(right_layout)

        # 设置比例
        left_layout.setStretch(0, 1)  # image_group_box.py 图片盒子占据左侧布局全部空间
        right_layout.setStretch(0, 4)  # captureBox 截图盒子占据右侧布局五分之四的空间
        right_layout.setStretch(1, 1)  # captureInfoBox  截图信息盒子占据右侧布局五分之一的空间

        # 设置主布局中左右部分的比例（50% : 50%）
        main_layout.setStretch(0, 1)  # 左侧部分占50%
        main_layout.setStretch(1, 1)  # 右侧部分占50%

        # 连接ImageLabel的选区更改信号到处理函数
        self.imgBox.imgLabel.selectionChanged.connect(self.on_image_selection_changed)
        # 暂时断开ImageLabel的图片加载信号到CaptureInfoBox的连接，避免崩溃
        # self.imgBox.imgLabel.imageLoaded.connect(self.group_box3.set_image_size)

    def on_image_selection_changed(self, pixmap, width, height, x, y, record_pos, name):
        """处理图片选区更改事件"""
        print(f"Main window received selection change - Width: {width}, Height: {height}, X: {x}, Y: {y}")
        # 更新截图显示
        if pixmap:
            self.captureBox.update_capture(pixmap)
        
        # 更新截图信息
        self.group_box3.update_info(width, height, x, y, record_pos, name)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())